From 1f6c55d7318e7075169004b4314708f4766ec193 Mon Sep 17 00:00:00 2001
From: Adam Duskett <aduskett@gmail.com>
Date: Mon, 27 Sep 2021 12:55:09 -0700
Subject: [PATCH] add qemu-wrapper support

V8's JIT infrastructure requires binaries such as mksnapshot and mkpeephole to
be run in the host during the build. However, these binaries must have the
same bit-width as the target (e.g. a x86_64 host targeting ARMv6 needs to
produce a 32-bit binary). To work around this issue, cross-compile the
binaries for the target and run them on the host with QEMU, much like
gobject-introspection.

However, for the host-variant we do not want to use a
qemu-wrapper, so add @MAYBE_WRAPPER@ to the needed files and sed the path to
the qemu-wrapper on target builds, and remove @MAYBE_WRAPPER@ entirely on
host-builds.

[Adam: Update for 20.9.0]
Signed-off-by: Adam Duskett <aduskett@gmail.com>
---
 node.gyp                 |  6 ++++--
 tools/v8_gypfiles/v8.gyp | 10 +++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/node.gyp b/node.gyp
index 97cdbb531d..db5cf51ce6 100644
--- a/node.gyp
+++ b/node.gyp
@@ -662,7 +662,7 @@
                   'action_name': 'node_mksnapshot',
                   'process_outputs_as_sources': 1,
                   'inputs': [
-                    '<(node_mksnapshot_exec)',
+                    @MAYBE_WRAPPER@ '<(node_mksnapshot_exec)',
                     '<(node_snapshot_main)',
                   ],
                   'outputs': [
@@ -682,7 +682,7 @@
                   'action_name': 'node_mksnapshot',
                   'process_outputs_as_sources': 1,
                   'inputs': [
-                    '<(node_mksnapshot_exec)',
+                    @MAYBE_WRAPPER@ '<(node_mksnapshot_exec)',
                   ],
                   'outputs': [
                     '<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc',
@@ -966,6 +966,7 @@
           'action_name': 'node_js2c',
           'process_outputs_as_sources': 1,
           'inputs': [
+            @MAYBE_WRAPPER@
             '<(node_js2c_exec)',
             '<@(library_files)',
             '<@(deps_files)',
@@ -975,6 +976,7 @@
             '<(SHARED_INTERMEDIATE_DIR)/node_javascript.cc',
           ],
           'action': [
+            @MAYBE_WRAPPER@
             '<(node_js2c_exec)',
             '<@(_outputs)',
             'lib',
diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp
index 73099a03e4..88ca91efb4 100644
--- a/tools/v8_gypfiles/v8.gyp
+++ b/tools/v8_gypfiles/v8.gyp
@@ -81,7 +81,7 @@
         {
           'action_name': 'run_torque_action',
           'inputs': [  # Order matters.
-            '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)',
+            @MAYBE_WRAPPER@ '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)',
             '<@(torque_files)',
           ],
           'outputs': [
@@ -112,7 +112,7 @@
             '<@(torque_outputs_inc)',
           ],
           'action': [
-            '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)',
+            @MAYBE_WRAPPER@ '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)',
             '-o', '<(SHARED_INTERMEDIATE_DIR)/torque-generated',
             '-v8-root', '<(V8_ROOT)',
             '<@(torque_files_without_v8_root)',
@@ -224,7 +224,7 @@
         {
           'action_name': 'generate_bytecode_builtins_list_action',
           'inputs': [
-            '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)bytecode_builtins_list_generator<(EXECUTABLE_SUFFIX)',
+            @MAYBE_WRAPPER@ '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)bytecode_builtins_list_generator<(EXECUTABLE_SUFFIX)',
           ],
           'outputs': [
             '<(generate_bytecode_builtins_list_output)',
@@ -401,7 +401,7 @@
             ],
           },
           'inputs': [
-            '<(mksnapshot_exec)',
+            @MAYBE_WRAPPER@ '<(mksnapshot_exec)',
           ],
           'outputs': [
             '<(INTERMEDIATE_DIR)/snapshot.cc',
@@ -1660,7 +1660,7 @@
         {
           'action_name': 'run_gen-regexp-special-case_action',
           'inputs': [
-            '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)gen-regexp-special-case<(EXECUTABLE_SUFFIX)',
+            @MAYBE_WRAPPER@ '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)gen-regexp-special-case<(EXECUTABLE_SUFFIX)',
           ],
           'outputs': [
             '<(SHARED_INTERMEDIATE_DIR)/src/regexp/special-case.cc',
-- 
2.37.3

